// 引入各种模块
const http = require('http'),
  fs = require('fs'),
  qs = require('querystring'),
  path = require('path'),
  url = require('url'),
  multiparty = require('multiparty');

  // 创建服务器
const app = http.createServer((request, response) => {
	// 设置请求头
	response.setHeader('Access-Control-Allow-Origin', '*');
	response.setHeader('Access-Control-Allow-Header', 'Content-Type, Authorization');

	// 获取url路径, 得到pathname 和 query部分
  const { pathname, query } = url.parse(request.url);

  // 匹配端口
  if (pathname === '/upload' && request.method === 'POST') {
    // 新建一个解析formData的对象工具
    const form = new multiparty.Form()
    // 使用form的parse方法解析传过来的formData数据
    // 将文件存入img目录
    // 解析传入的formData数据
    form.parse(request, (err, fields, files) => {
      console.log(files)
      // 遍历files对象
      const data = []
      Object.values(files).forEach((item) => {
				const imgpath = path.join(__dirname, './dist/img', item[0].originalFilename);
				// 创建可读流 好处: 减少内存的使用
				const rs = fs.createReadStream(item[0].path);
				// 创建写入流 好处: 减少内存的使用   rs.pipe( ws )
				const ws = fs.createWriteStream(imgpath);
        rs.pipe(ws);
        data.push(item[0].originalFilename);
			})
      // 设置响应头
      response.writeHead(200, 'success', {
        'Content-Type': 'application/json'
      })
      response.end(
				JSON.stringify({
					message: '成功',
          code: 200,
          data
				})
			);
    })
    return
  }

	// 匹配静态资源
  const abspath = path.join(__dirname, './dist', pathname);
  console.log(abspath)
	// 判断该路径 是否为资源
  if (!fs.existsSync(abspath)) {
    return response.end('404' + pathname.slice(1) + ' is not found');
  } else {
		// 获取资源信息
		const stat = fs.statSync(abspath);
		// 如果是目录
		if (stat.isDirectory()) {
			return response.end('400' + pathname.slice(1) + ' is dir , can not return');
		} else {
			// 是资源并且是文件, 返回文件
			return response.end(fs.readFileSync(abspath));
		}
	}
})

// 分配端口号, 监听
const port = 25041
app.listen(port, () => console.log(port + 'beingMonitored'));


